/*
 * @Author: HeAo
 * @Date: 2022-08-19 14:28:36
 * @LastEditTime: 2022-08-21 20:17:59
 * @LastEditors: HeAo
 * @Description: 
 * @FilePath: \JavaScripe\day-10\01-原型链继承.js
 * 别乱动！
 */

/*
目的：子构造函数继承父构造函数
Dog.prototype已经变成了Animal的实例对象 
此时constructor会发现改变 因此需要Dog.prototype.constructor再改回来
*/
// 父构造函数
function Animal() { //构造函数
  this.name = 'animal'
}
Animal.prototype.getAnimalName = function () {
  console.log(this.name + '-我是getAnimalName');
}

// 子构造函数

function Dog() {
  this.name = 'dog'
}
// 开始继承 手动Dog.prototype赋值为new Animal() 将Dog.prototype当作实例对象，Animal()为它的构造函数
// 类似：var a=new Animal()
Dog.prototype = new Animal() //Dog.prototype继承Animal()
// 若向Dog的原型中添加方法 则需要改变constructor的指向
Dog.prototype = { //字面量写法，constructor指向大的Object
  getDogName() {
    console.log(this.name + 'getDogName');
  }
}
Object.defineProperty(Dog.prototype, 'constructor', {
  enumerable: false,
  value: Dog
})

var d1 = new Dog()
d1.getAnimalName()
// d1.getDogName()









// 1、倘若我们向Dog.prototype添加新的方法，则需要再继承之后再添加

// d1.getDogName()
// 实例对象的属性 会遮蔽原型对象的属性 